#pragma once
#include <iostream>
#include <assert.h>
using namespace std;
class Date
{
public:
    // 构造函数，用于创建 Date 类的对象
    Date(int year = 1, int month = 1, int day = 1);

    // 成员函数
    void Print();
    // 获取某年某月的天数
    int GetMonthDay(int year, int month);

    // 比较运算符重载：
    bool operator==(const Date &y);
    bool operator!=(const Date &y);
    bool operator>(const Date &y);
    bool operator<(const Date &y);
    bool operator>=(const Date &y);
    bool operator<=(const Date &y);

    // 算术运算符重载:
    // 返回当前日期与另一个日期之间的天数差
    int operator-(const Date &d);
    Date &operator+=(int day);
    Date operator+(int day);
    // operator-=直接修改当前对象，而operator-则创建一个新的日期对象。
    Date &operator-=(int day);
    Date operator-(int day);

    // 递增和递减运算符重载
    // 这两个函数重载了递增运算符（++）。前置版本（operator++()）直接修改当前对象并返回其引用，而后置版本（operator++(int)）则创建一个当前日期的副本，递增该副本，并返回递增前的原始日期。
    Date &operator++();
    Date operator++(int);
    // 这两个函数重载了递减运算符（--）。它们的行为与递增运算符的重载类似，只是一个是递减日期而不是递增。
    Date &operator--();
    Date operator--(int);

private:
    int _year;
    int _month;
    int _day;
};